docs: function expandMap( map ) {
  		grunt.verbose.writeln( 'BowerMap::expandMap' );
  		var expanded = {};
  
  		var mappedNames = Object.keys( map );
  		mappedNames.forEach( function( packageName ){
  			var value = map[ packageName ];
  
  			//get full source path for package
  			var src = path.fix( path.join( bowerPath, packageName ) );
  			var exists = grunt.file.exists( src );
  
  			//continue if the source exists
  			if ( exists ) {
  				if ( grunt.file.isFile( src ) ) {
  					//src is a file, it must be mapped to a string value
  					if ( typeof value === "string") {
  						expanded[ src ] = path.fix( path.join( destPath, value ) );
  					}
                      else if (  value === false ){
                          expanded[ src ] = false;
                      }
  					else {
  						grunt.log.error( 'Invalid mapped value for: ' + src );
  					}
  				}
  				else {
  					//src is a component directory,
  					//   value can be an object containing specific file mappings
  					//      or
  					//   value can be a string path
  
  					var fsrc, fpath;
  					if ( typeof value === "object" ) {
  						//map specific files
  						var fileNames = Object.keys( value );
  						fileNames.forEach( function( fileName ){
  							//get file source
  							fsrc = path.fix( path.join( src, fileName ) );
  							//get file destination path
  							fpath = value[ fileName ] ? path.fix( path.join( destPath, value[ fileName ] ) ) : false;
  							if ( grunt.file.isFile( fsrc ) ) {
  								//source exists, continue with mapping
  								expanded[ fsrc ] = fpath;
  							}
  							else if ( grunt.file.isDir( fsrc ) ) {
  								grunt.verbose.writeln( '   map directory: ' + path.join( fsrc, '**' ) );
  								glob.sync( path.join( fsrc, '**' ), { dot: true } ).forEach( function( filename ) {
  									filename = path.fix( filename );
  									if ( grunt.file.isFile( filename ) ) {
  										fpath = fpath ? path.fix( path.join( destPath, value[ fileName ], filename.replace( fsrc, "" ) ) ) : false;
  										grunt.verbose.writeln( '     from:' + filename );
  										grunt.verbose.writeln( '       to:' + fpath );
  										expanded[ filename ] = fpath;
  									}
  								} );
  
  							}
  							else {
  								grunt.log.error( 'Could not locate source path: ' + fsrc );
  							}
  						});
  					}
                      else if ( typeof value === "string" ) {
                          //map entire directory
                          grunt.verbose.writeln( '   map directory: ' + path.join( src, '**' ) );
                          glob.sync( path.join( src, '**' ), { dot: true } ).forEach( function( filename ) {
                              if ( grunt.file.isFile( filename ) ) {
                                  filename = path.fix( filename );
                                  fpath = path.fix( path.join( destPath, value, filename.replace( src, "" ) ) );
                                  grunt.verbose.writeln( '     from:' + filename );
                                  grunt.verbose.writeln( '       to:' + fpath );
  
                                  expanded[ filename ] = fpath;
                              }
                          } );
                      }
                      else if ( typeof value === false ) {
                          //map entire directory
                          grunt.verbose.writeln( '   map directory: ' + path.join( src, '**' ) );
                          glob.sync( path.join( src, '**' ), { dot: true } ).forEach( function( filename ) {
                              if ( grunt.file.isFile( filename ) ) {
                                  filename = path.fix( filename );
                                  fpath = false;
                                  grunt.verbose.writeln( '     from:' + filename );
                                  grunt.verbose.writeln( '       to:' + fpath );
  
                                  expanded[ filename ] = fpath;
                              }
                          } );
                      }
  					else {
  						grunt.log.error( 'Invalid mapped value for: ' + src );
  					}
  				}
  			}
  			else {
  				grunt.log.error( 'Could not locate source path: ' + src );
  			}
  
  		});
  		//console.log( "map:", expanded );
  		return expanded;
  	}