Попробуйте установить для необработанного флага (2-й аргумент) значение true.
var data = jQuery.parseJSON('{"data":[{"title":"Title One"}, {"title":"Title Two"}]}');
var html = ich.data_template(data, true); #Note the true.
Кроме того, почему вы пишете свой JSON в виде строки и анализируете его? Вы можете сделать:
var data = {"data": [{"title": "Title One"}, {"title": "Title Two"}]};
var html = ich.data_template(data, true);
Без необработанного флага он возвращает массив элементов узла, и вам потребуется установить элемент корневого уровня для его работы.
<script type="text/html" id="data_template">
<div>
{{#data}}
{{title}}<br />
{{/data}}
</div>
</script>
Вы можете проверить это, запустив в консоли следующий JavaScript.
ich.addTemplate('data_template', '{{#data}}{{title}}<br />{{/data}}');
var data = {"data": [{"title": "Title One"}, {"title": "Title Two"}]};
var html = ich.data_template(data, true);
console.log(html);
html = ich.data_template(data);
console.log(html);
ich.addTemplate('data_template_root', '<div>{{#data}}{{title}}<br />{{/data}}</div>');
html = ich.data_template_root(data, true);
console.log(html);
html = ich.data_template_root(data);
console.log(html);