I just finished an ajax login with CSRF and it was quite nice, but the next site will go back to a normal separate login page, I think the effort it took was not really worth it. I don't think it improved the user experience significantly.
So I am guessing that your 500 internal error is probably that you have a problem with your code rather than an inherent AJAX or CI problem. Since it is a server side error, it is probably in your controller or a model call. If you are using all the same model calls, probably in your controller. Can you not narrow it down a bit. (First of all, just ajax back a hello world type message. That should work. Then just keep moving that line down the ajax controller code until you get to where the problem occurs.
Hope that helps,
Paul.
Edit: No, there is nothing special about ajax controllers except that it can be harder to debug and you should echo the responses, not use the normal load->view rendering.