docs: function parents(tree, query, options) {
      var compiledQuery = _.isFunction(query) ? _.noop : _.matches(query);
      var seekStack = [];
  
      var settings = _.defaults(options, {
        childNode: ['children']
      });
  
      settings.childNode = _.castArray(settings.childNode);
  
      var seekDown = function seekDown(tree) {
        var foundChild = _.find(tree, _.isFunction(query) ? query : compiledQuery);
  
        if (foundChild) {
          seekStack.unshift(foundChild);
          return true;
        } else {
          return tree.some(function (branch) {
            var walkedStack = false;
            settings.childNode.some(function (key) {
              // Walk down first found childNode entry
              if (branch[key] && _.isArray(branch[key]) && seekDown(branch[key])) {
                // Found a valid key - stop iterating over possible key names
                seekStack.unshift(branch);
                walkedStack = true;
                return true;
              }
            });
            return walkedStack;
          });
        }
      };
  
      seekDown(_.castArray(tree));
      return seekStack;
    }