I'm with dougal85, I like to use a framework. In fact, I'm pretty sold on prototype. And I use it for the same reasons (I don't have to worry about cross browser support, etc.) Another reason I have used it (example) is a list of options for a client. Prototype has an object called PeriodicalUpdater which allows me to keep the list updated in real time (think tickets for a show.) Now, noting that AJAX is basically using just one javascript object (XMLHttpRequest) one can build this stuff "from scratch" and keep his or her code lightweight (without all the bells and whistles.) For example, I could have probably found a way to use setInterval to continue calling my home-brewed AJAX-ian code and updating my list. However, I trust the implementation of PeriodicalUpdater and I didn't have to write any javascript (just call Ajax.PeriodicalUpdater.) Plus, it has tons of useful DOM building stuff when you pull back that data as JSON and eval() it (note, it can detect JSON header and eval the JSON for you.) On that note, I really like Builder from scriptaculous (which is an extension of Prototype for anyone who didn't already know.) Finally, check out how easy it is to submit a form with Prototype.
Also, I saw a post the other day (can't remember sorry) where somebody was using ajaxslt. I suppose that means they use ajax to get XML and XSL templates and transform it on the fly to build DOM elements. I found a very basic demo that uses ajaxslt.