I've tried myself, and the implementation matches the async docs. Perhaps something else is going on in your testing?

Here's my sample code:

    var async = require('async');

    var list = [1,2,3];
    console.log("Input: ", list);
    async.filter(list, function (item, cb) {
        if (item > 3) return cb(true);
        cb(false);
    }, function (results) {
        console.log("Results: ", results);
    });

Change the conditional to various different things and it always results in an array.