Основная проблема заключается в том, что innerHTML устанавливает HTML-код внутри элемента и не заменяет его.
Таким образом, вы по крайней мере получите элемент body внутри элемента body, что недопустимо.
Так что вам пришлось использовать replaceChild вместо innerHTML, но вы не можете, потому что у вас нет body-node, и, кроме того, я боюсь, что это не сработало для замены body-element вообще (по крайней мере в IE).
responseXML (если имеется) также не поможет вам в этом случае, потому что вы не можете перемещать узлы между различными документами в IE
Вывод:
Вам нужно будет проанализировать ответ, извлечь содержимое тела и класс тела.
Затем установите innerHTML и класс существующего тела.
Краткий пример (возможно, RegExp необходимо изменить в зависимости от ответа)
var parsed=this.responseText.match(/<body\s+class="([^"]*)">(.*)<\/body>/);
document.body.className=parsed[1];
document.body.innerHTML=parsed[2];