я тоже часто сталкиваюсь с этим вопросом.
для себя избрал три подхода:
1. если требуется сгенерировать мало кода, что-то впроде одного текстового поля с лэйблом, использую для этого jquery: $(''...).after(...). Удобно тем, что можно скэшировать ссылки на элементы, на которые потом навешиваются обработчкики событий и т.п.
2. структура может быть чуть посложнее, но не намного, то юзаю $.nano — удобный плагин и очень маленький. мне нравится даже то как он написан. Правда есть ограничения — у него плохо с массивами значений, но
3. Если большие данные для рендеринга ходят между клиентом и сервером, то я здесь уже весь HTML генерирую на сервере, а потом его вставляю. Дело в том, что я считаю, что сайт попрежнему должен иметь возможность работать без JS (это отдельный вопрос — почему). Поэтому если JS по каким-то причинам не отрабатывает, приходит нормальная страница. Сервер сам решает в зависимости от того ajax или неajax запрос пришел и отдает либо полную страницу либо кусок. Кстати, помогает в этом jquery ajaxify плагин