docs: function () {
              count++;
  
              // all themes have been built.
              if (count === themes.length) {
                  // slight delay to ensure future tasks can interact with theme files.
                  setTimeout(done, 500);
                  return;
              }
  
              var child = grunt.util.spawn({
                  cmd: 'npm',
                  args: ['run', options.task],
                  opts: {
                      cwd: path.join(options.themes, themes[count])
                  }
              }, function(error, result, code) {
                  if (error) {
                      grunt.fail.fatal('Failed to build theme ' + themes[count] + '.');
                      return;
                  }
                  
                  helpers.deleteDirectory(path.join(options.dest, themes[count]));
                  copyTheme();
              });
  
              child.stdout.on('data', function(buf) {
                  grunt.log.writeln(String(buf));
              });
  
              child.stderr.on('data', function(buf) {
                  grunt.log.writeln(String(buf));
              });
          }