Non sono del tutto chiaro cosa intendi per "restituire un campo", ma puoi usare un lean()
query in modo da poter modificare liberamente l'output, quindi compilare entrambi i campi e post-elaborare il risultato per mantenere solo il campo desiderato:
.lean().populate('user', 'email.address facebook.address')
.exec(function (err, subscription){
if (subscription.user.email.address) {
delete subscription.user.facebook;
} else {
delete subscription.user.email;
}
});