I think the issue is that in template "a" that the parameter "b" is a node set. To access this, you may have to use an "node-set" extension function in the XSL. It is not part of standard XSLT, so you need to specify an extension.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="urn:schemas-microsoft-com:xslt">
<xsl:template match="/">
<xsl:call-template name="a">
<xsl:with-param name="b">
<xsl:apply-templates select="text()"/>
</xsl:with-param>
</xsl:call-template>
</xsl:template>
<xsl:template name="a">
<xsl:param name="b"/>
<xsl:for-each select="ext:node-set($b)">
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:template>
<xsl:template match="text()">
<aNewTag>
<xsl:value-of select="."/>
</aNewTag>
</xsl:template>
</xsl:stylesheet>
This one only works for Microsoft's XML parser (MSXML) only. For other XML processors, such as xsltproc, the namespace "http://exslt.org/common" should be used.
This then allows you to access the node, or nodes, that make up the "b" parameter, although in my example above I have used to iterate over them.
Here is an article which explains about the node-set
XML.Com Article