Итак, после тонны копания выясняется, что способ ввода пользовательских полей в node_save был неправильным. Параметр node_save должен выглядеть следующим образом:
node_save(node_submit((object)array(
'type' => 'foo',
'is_new' => true,
'uid' => 1,
'title' => 'the title',
'url' => array(
'und' => array(array(
'summary' => '',
'value' => 'url value',
'format' => 2,
))),
'body' => array(
'und' => array(array(
'summary' => '',
'value' => 'the body goes here',
'format' => 2,
))),
)));
Обратите внимание, что для пользовательских полей структура массива должна соответствовать тому, что ранее происходило с CCK (в значительной степени точно). Первый ключ в массиве, описывающий значение поля, - это язык для содержимого.
Я использовал здесь 'und' только потому, что это то, что я видел, входя в базу данных при вводе данных через форму.