I have looked through tons of XML and XSLT webpages and books and
still can't find an example of how you do this.

I have flagged null attributes with a string value of NOA (No
Operational Data)

At the Output Transform, these must be transformed into the W3C
standard nil elements.

i.e for the telephone attribute the valid values for the Web Service
would be.

<telephone>03-9096-0000</telephone> signifying it has a value during
an add or modify operation.

<telephone></telephone> signifying it is now an empty string during a
modify operation (signifying the current value at the Web service is
to be removed).

<telephone xsi:nil="true"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/> signifying it
is a nil element. i.e it has no value for an add operation or it has
not changed values for a modify operation.

So the simple piece of the stylesheet goes like this...

<xsl:for-each select="add-attr">
<xsl:variable name="nameofelement"
select="string(@attr-name)" />
<xsl:variable name="valueofelement" select="string(.)"
/>
<xsl:element name="{$nameofelement}">
<xsl:choose>
<xsl:when
test="$valueofelement='NOA'">
<xsl:attribute
name="xsi:nil">true</xsl:attribute>
</xsl:when>
<xsltherwise>
<xsl:value-of
select="$valueofelement" />
</xsltherwise>
</xsl:choose>
</xsl:element>
</xsl:for-each>

This has added the "xsi:nil" attribute to the element.
How do I add the schema declaration to the same element?