This could be considered a feature request, as List.groupTpl doesn't show up in the documents so it's hard to say what it's "supposed" to do. However, I've seen it given out by Sencha staff as part of answers, and it isn't marked private in the source code, so I think perhaps you mean for us to use it.

In any case, the way List.initComponent works, groupTpl can't receive an XTemplate instance, so this means it can't have user functions. This is due to this piece of code in List.initComponent:
Code:
if (Ext.isString(this.groupTpl) || Ext.isArray(this.groupTpl)) {
    this.tpl = new Ext.XTemplate(this.groupTpl);
}
This strips it of any user functions. Instead, the following could be used:
Code:
if (Ext.isString(this.groupTpl) || Ext.isArray(this.groupTpl)) {
    this.tpl = new Ext.XTemplate(this.groupTpl);
}
else if (this.groupTpl && this.groupTpl.html)
  this.tpl = new Ext.XTemplate(this.groupTpl.html, this.groupTpl.initialConfig);
In the meantime, here's the override I'm using as a workaround:
Code:
Ext.jep.List = Ext.extend(Ext.List, {
  initComponent : function() {
    Ext.jep.List.superclass.initComponent.apply(this);
    
    if (this.grouped && this.groupTpl && this.groupTpl.html) {
      this.tpl = new Ext.XTemplate(this.groupTpl.html, this.groupTpl.initialConfig);
    }
  }
});