Acoplar datos jerárquicos

Tengo una estructura de datos como esta:

{
    name: 'test',
    config: { ... },
    prev: {
        name: 'test1.1',
        config: { ... },
        prev: {
            name: 'test1.1.1',
            config: { ... },
            prev: {
                name: 'test1.1.1.1',
                config: { ... },
                prev: undefined
            }
        }
    }
}

La estructura puede contener cualquier cantidad de estructuras recursivas pero idénticas dentro del objeto 'anterior'.

Quiero extraer la propiedad 'nombre' de cada niño. ¿Cómo puedo aplanar esto usando guión bajo para producir un conjunto de resultados como este:

['test', 'test1.1', 'test1.1.1', 'test1.1.1.1']

Sería aún mayor si el proceso de aplanamiento pudiera devolver algo como

[
    {name: 'test', config: { ... }}, 
    {name: 'test1.1', config: { ... }}, 
    {name: 'test1.1.1', config: { ... }},
    {name: 'test1.1.1.1', config: { ... }}
]

Mi solución actual es esta (que no es óptima. Me gustaría usar una _.cadena para producir esto):

var _self = {
    flatten: function (obj) {
        var map = [];
        return _self.flattenRecurse(obj, map);
    },
    flattenRecurse: function (obj, map) {
        map.push({name: obj.name, config: obj.config});
        if (obj.prev) {
            _self.flattenRecurse(obj.prev, map);
        }
    }
}
var flattened = _self.flatten(data);

Respuestas a la pregunta(2)

Su respuesta a la pregunta