Да понял уже свою ошибку, у меня ещё нет объекта, а я уже перебираю его свойства.
Вот в этом месте всё работает:
<!-- ======================================================== -->
<!-- Шаблон выводит ссылки подгруппы информационного элемента -->
<!-- ======================================================== -->
<xsl:template match="group" mode="goups">
<xsl:variable name="gparam">
<xsl:text>0</xsl:text>
<xsl:for-each select="propertys/property">
<xsl:if test="value != 0">
<xsl:text>,</xsl:text>
<xsl:value-of select="@id"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<tr><td id="a{@id}" onmouseout="javascript:unsel({$gparam})" onmouseover="javascript:sel({$gparam})">
<a href="{/document/blocks/url}{fullpath}">
<xsl:value-of disable-output-escaping="yes" select="name"/>
</a>
</td></tr>
</xsl:template>
А чтобы сделать подобное до перехода к шаблону подгрупп, нужно сделать цикл по дополнительным свойствам первой подгруппы, не обращая внимания на значения:
<xsl:for-each select=".//group[@parent_id=$parent_group_id][1]/propertys/property">
<xsl:sort select="name"/>
<xsl:value-of select="name"/>
</xsl:for-each>
Может кому пригодится.