Ho risolto. Chiunque fosse interessato può usufruire del codice che ho prodotto.

Struttura XML desiderata:
codice:
<?xml version="1.0" encoding="UTF-8" ?> 
<utenti>
      <utente ID="12345">
            <nome><![ CDATA[ Mario ]]></nome>
            <cognome><![CDATA[ Rossi ]]></cognome>
            <recapiti>
	          <telefono>123456789</telefono> 
  		  <fax>147258369</fax> 
		  <email><![CDATA[ mario.rossi@esempio.com ]]></email>
  	    </recapiti>
	    <funzione><![CDATA[ Responsabile M&A ]]></funzione>
      </utente>
</utenti>
Soluzione:
codice:
<%
Const 	strXMLPath 			= "C:\Inetpub\wwwroot\XML\"
Const 	strXML_filename			= "file_esempio.xml"

Dim 	objXMLDom
Dim 	objRoot

Dim 	objNodo
Dim 	objNodoFiglio
Dim 	strNomeNodo
Dim 	strValore
Dim 	iCDATA

Dim 	strAttributo
Dim 	strValoreAttributo	

Dim 	objUtente
Dim 	objRecapiti

' ///	FUNZIONI XML
' ///	Nodo
Function CreaNodo( objNodo, strNomeNodo, strValore, iCDATA )
	Set objNodoFiglio = objNodo.AppendChild( objXMLDom.createElement( strNomeNodo ) )
	If Not isEmpty( strValore ) Then
		If iCDATA = 0 Then
			objNodoFiglio.text  = strValore
		Else
			objNodoFiglio.AppendChild objXMLDom.createCDATASection( strValore )
		End If
	End If		
End Function

' ///	Attributi
Function Attributi( strAttributo, strValoreAttributo )
	objNodoFiglio.setAttribute strAttributo, strValoreAttributo	
End Function

' ///	CREAZIONE OGGETTO
Set objXMLDom = Server.CreateObject("MSXML2.DOMDocument")

' ///	DICHIARAZIONE XML
objXMLDom.appendChild objXMLDom.createProcessingInstruction("xml", "version=""1.0"" encoding=""UTF-8""")

' ///	ELEMENTO RADICE
Call CreaNodo( objXMLDom, "utenti", "", 0 ) ' 0 = testo ; 1= CDATA
Set objRoot = objNodoFiglio

' ///	ELEMENTI UTENTE
Call CreaNodo( objRoot, "utente", "", 0 ) ' 0 = testo ; 1= CDATA
Set objUtente = objNodoFiglio
Call Attributi ( "ID", "12345" )

Call CreaNodo( objUtente, "nome", "Mario", 1 ) ' 0 = testo ; 1= CDATA

Call CreaNodo( objUtente, "cognome", "Rossi", 1 ) ' 0 = testo ; 1= CDATA

Call CreaNodo( objUtente, "recapiti", "", 0 ) ' 0 = testo ; 1= CDATA
Set objRecapiti = objNodoFiglio

	Call CreaNodo( objRecapiti, "telefono", "123456789", 0 ) ' 0 = testo ; 1= CDATA	
	
	Call CreaNodo( objRecapiti, "fax", "147258369", 0 ) ' 0 = testo ; 1= CDATA
	
	Call CreaNodo( objRecapiti, "email", "mario.rossi@esempio.com", 1 ) ' 0 = testo ; 1= CDATA
	
Call CreaNodo( objUtente, "funzione", "Responsabile M&A", 1 ) ' 0 = testo ; 1= CDATA

' ///	SALVATAGGIO e PULIZIA DEGLI OGGETTI
objXMLDom.save Trim(strXMLPath & strXML_filename)

Set objXMLDom 			= Nothing
Set objRoot 			= Nothing

Set objNodo 			= Nothing
Set objNodoFiglio		        = Nothing

Set objUtente	 		= Nothing
Set objRecapiti			= Nothing
%>
Ad ogni modo non sono completamente soddisfatto, per cui rilancio a qualche buonanima l'invito ad aiutarmi a ottimizzare questa soluzione. Il risultato che vorrei raggiungere è quello di evitare di dover creare oggetti per ogni elemento genitore.

C'è un modo per appendere il nuovo elemento passando il nome dell'elemento genitore? In questo modo la funzione verrebbe ottimizzata ulteriormente a beneficio dell'intera soluzione, specie per strutture XML molto complesse.

Ciao ;-)