Bien, parece que el problema esta por el lado de PHP obviamente. Dejo la solución por si alguien tiene el mismo problema.
  
 Resulta que la linea que sigue:    
 Formatea el archivo xml para que los navegadores los puedan presentar de una forma legible. 
 Cambiando 
true por 
false se corregiria mi problema y se eliminarian todos los saltos de linea, tabulaciones y espacios insertados por el mismo objeto php.
 Ahora pude obtener la siguiente salida:    
Código HTML:
Ver original<?xml version="1.0"?>
<root><producto><nombre>Producto1</nombre><idcategoria>idCategoriaProducto1</idcategoria></producto><producto><nombre>Producto2</nombre><idcategoria>idCategoriaProducto2</idcategoria></producto><producto><nombre>Producto3</nombre><idcategoria>idCategoriaProducto3</idcategoria></producto></root>
  
esta salida me sirve para que mi codigo javascript funcione correctamente sin tener que aumentar de a 2 el indice de la lista de nodos hijos:    
Código Javascript
:
Ver originalfunction cargarProductos(producto){
    
    var httpRequest;
    if (window.XMLHttpRequest)
    {
            //El explorador implementa la interfaz de forma nativa
            httpRequest = new XMLHttpRequest();
    } 
    else if (window.ActiveXObject)
    {
            //El explorador permite crear objetos ActiveX
            try {
                    httpRequest = new ActiveXObject("MSXML2.XMLHTTP");
            } catch (e) {
                    try {
                            httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
                    } catch (e) {}
            }
    }
    
    
    httpRequest.onreadystatechange = function() {
        if (httpRequest.readyState == 4) {
            
            if (httpRequest.status ==200){
 
                   
            var parser = new DOMParser();
            var xmlDoc = parser.parseFromString(httpRequest.responseText, "application/xml");
 
            
            var root= xmlDoc.getElementsByTagName("producto");
 
            for (var i=0; i<root.length; i++){          
            
                var nombre= root[i].childNodes[0].textContent;
                
                var idCategoria= root[i].childNodes[1].textContent;
                
                var divisor= document.getElementById("productos");
                var campo= document.createElement("fieldset");
                var texto= document.createTextNode("Nombre= "+nombre+" idcategoria= "+idCategoria);
                campo.appendChild(texto);
                divisor.appendChild(campo);
            }
            }
            
            
            }else alert(httpRequest.readyState);
            
        }
    
    httpRequest.open('GET', '../ajax/ObtenerProductos.php?math=' + Math.random(), true);
    httpRequest.send(null);
 
    return false;
}
  
Como se pueden ver en las lineas 36 y 38, accedo a los nodos hijos con los indices correctos. 
ahora a seguir con esto que me está sacando la cabeza