Firstly, these for-each loops seem incredibly verbose. As far as I can see, you've just coded the equivalent of
<xsl:copy-of select="LIST_BILLTO_ADDRESSES/G_BILLTO_ADDRESS">
in longhand.
But the code you want to write isn't a straight copy, so you may not be able to do that.
In XSLT 2.0 I'd suggest:
<xsl:template match="LIST_MAILTO_ADDRESSES">
<xsl:for-each-group select="*, preceding-sibling::G_BILLTO_ADDRESS/*"
group-by="node-name()">
<xsl:copy-of select="current-group()[1]"/>
</xsl:for-each-group>
</xsl:template>
which pairs up the child elements in the two addresses and copies the first of each pair.
It's harder to come up with a clean generic solution in 1.0, I suspect you're stuck with something like:
<xsl:template match="LIST_MAILTO_ADDRESSES">
<xsl:variable name="B" select="preceding-sibling::BILLTO_ADDRESSES"/>
<xsl:copy-of select="(ACCT_NUMBER | $B/ACCT_NUMBER)[last()]"/>
<xsl:copy-of select="(NAME | $B/NAME)[last()]"/>
etc
Michael Kay
http://www.saxonica.com/
Author, XSLT Programmer's Reference and XPath 2.0 Programmer's Reference