jQuery: oсобенности работы с DOM

Про особенности функции ajax_common_replace() уже было написано. Вот только связано это, похоже, не с особенностями реализации в Drupal, а с самой jQuery.

// We don't know what response.data contains: it might be a string of text
// without HTML, so don't rely on jQuery correctly iterpreting
// $(response.data) as new HTML rather than a CSS selector. Also, if
// response.data contains top-level text nodes, they get lost with either
// $(response.data) or $('<div></div>').replaceWith(response.data).
var new_content_wrapped = $('<div></div>').html(response.data);

Далее речь идет о legacy reasons, как-то: о недопустимости вставки внутрь контейнеров типа TABLE, TD или SPAN.

Объект, который предстоит вставить внутрь DOM при помощи jQuery.replaceWith(), должен представлять из себя DOM-элемент, а не набор DOM-элементов.
В самом описании функции об этом не сказано, но убедиться в этом пришлось на другом примере:
Есть результат запроса AJAX:

jQuery.ajax({
  // параметры
}).done(function(response) {
  var result = $(response).find('p').text();
})

В случае, если response будет содержать данные вида:

<p>text1</p>
<p>text2</p>
то в result окажется только text1.
А если в нашем обработчике AJAX написать:
var result = $('<div></div>').html(response).find('p').text();
то есть окружить данные корневым контейнером, то мы получим в result строку "text1text2", что и требовалось