No tengo completamente claro lo que quiere decir con "devolver un campo", pero puede usar un lean()
consulta para que pueda modificar libremente la salida, luego complete ambos campos y postprocesar el resultado para mantener solo el campo que desea:
.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;
}
});