Все-таки я был не прав. Видимо переменные, объявленные в шаблонах, видны только внутри текущего шаблона и дочерних. А выше не видны. В инете нашел несколько тем по этому поводу, но решения ни у кого не отмечено.
Первое альтернативное решение, которое мне пришло в голову — это использовать modResource::setOption()/::getOption(). Дело в том, что эти методы имеют все производные от xPDOObject. Метод ::getOption() хорош еще и тем, что можно задать массив первостепенного источника и значение по умолчанию.
К примеру, задаем переменную в дочернем шаблоне (только эта переменная — свойство текущего ресурса).
{$modx->resource->setOption('foo', 'value')}
В родительском шаблоне после вызова дочернего шаблона эта переменная будет видна в ресурсе.
{$modx->resource->getOption('foo', $defaultSourceArray, $defaultValue)}
Но надо сразу учитывать, чтобы дочерний шаблон не был кешируемым, так как это переменная не Smarty, а самого документа. То есть если дочерний шаблон не был отработан, то и в ресурсе этой переменной не будет.