Node.js: callback или deferred?
Если я правильно понял вопрос, как удобно построить цепочку вызывающих себя через callback'и функций с передачей данных следующей функции, то с использованием async это пишется так:
var async = require('async');

async.waterfall([
	function(callback){
		setTimeout(function() {
			console.log('f1 done');
			callback(null, 'data from f1');
		}, 100);
	},
	function(data, callback){
		// работа с data
		// или расширение цепочки через функцию f3, которая по окончании работы вызовет callback
		// f3(callback);
		console.log('f2 done');
		callback(null, 'done');
	}
], function (err, result) {
	// result now equals 'done'
	if (err) {
		// единое место для отлова ошибок
	}
	console.log(result);
});

Для таких случаев я у себя использую async.