code: function(pages, callback) {
        var t = this,
            didError = false,
            numLeft = pages.length;
  
        // Callback early if no pages to read
        if (pages.length === 0) {
          return callback();
        }
  
        // Read and parse each file for the title/description
        pages.forEach(function(page, index) {
  
          // Read the file
          var fullPath = Path.join(t.dirPath, page.id + '.json');
          FS.readFile(fullPath, 'utf8', function(error, file) {
  
            // Process a stat error
            if (error) {
              didError = true;
              return callback(error);
            }
  
            // Parse the JSON
            var parsed = null;
            try {
              parsed = JSON.parse(file);
            }
            catch (e) {
              didError = true;
              console.error('JSON error parsing page: ' + fullPath, e);
              return callback(e);
            }
  
            // Do nothing if a prior error callback happened
            if (didError) {
              return;
            }
  
            // Set the page title and description
            if (parsed.title) {
              page.label = parsed.title;
            }
            if (parsed.description) {
              page.description = parsed.description;
            }
  
            // Add a file watcher if not already watching
            if (!t.fileWatchers[page.id]) {
              t.fileWatchers[page.id] = new FS.watch(fullPath, {persistent:false}, function(type){
                t.sync();
              });
            }
  
            // Callback if all page reads are complete
            if (--numLeft === 0) {
              callback(null);
            }
          });
        });
      }
docs: Add title (label) and description to the specified page objects.
  
  @method readPages
  @param pages {Array of Object} An array of objects with the id element set
  @param callback {Function(error)}