Yup, what you have will work. callback
just tells async, "I'm done, go to the next". You can also use async.apply
to generate those little wrapper functions automatically:
async.waterfall([
async.apply(foo, x1, x2, nX) //don't use callback, async will add it,
someOtherFunction
], function (error, finalResult) {});