Subway's new Ajax framework has an interesting approach: using inspect, Python source is retrieved from a method and then translated to JavaScript. Of course, only a subset of Python is supported, but the idea is quite interesting - Python syntax for JavaScript.
Of course, the semantic differences between Python's and JavaScript's interpreter execution will bite you sooner or later, but for simpler things (and many Ajax things are actually quite banal code on the JavaScript side), you can build without JavaScript source.
The whole thing would of course be much more elegant if Python had a reasonable macro language integrated - or if you could build macros in Python in the way you can in Common Lisp. This would make the definition of the subset and the creation of JavaScript from it much more elegant. Perhaps Philip J. Eby's work on configuration languages could help - it is essentially the approach of a macro facility for Python.
Personally, I would rather pursue an approach in Python where JavaScript is generated through Python code execution (i.e., not parsing and compiling) - because many Ajax functionalities are quite standardized processes. The DOM tree is usually manipulated according to fixed specifications, with data delivered via JSON. Most of this could be well standardized. However, I don't have any concrete code ready yet, so far Ajax for me is still direct JavaScript code - although with the help of MochiKit.
Let's see what else is happening in the Ajax-Python land. CrackAjax is at least another approach that might inspire others to build on this a bit better.