I would prefer doing this without recursion, as that would seem clearer to me (and more beautiful, for what it's worth). It could be done by something like:
```
if (! _.isArray(pluginsToLoad)) {
    pluginsToLoad = models.Settings.read( etc...
}
return when(pluginsToLoad).then(function(pluginsToLoadValue) {
   return plugins.init(self, pluginsToLoadValue).then( etc...
}
```

`when()` works with either a 'normal' value or a promise.