docs: function registerBower(pck) {
  	var pd = pck.commit.versionPkg({
  		replacer : pck.options.pkgJsonReplacer,
  		space : pck.options.pkgJsonSpace,
  		readOnly : true
  	});
  	if (!pd || !pd.pkgBower) {
  		rbot.log.info('Skipping bower registration check (no bower package found)');
  		return pck.rollCall.then(npmPub);
  	}
  	var path = pd.pkgBower.path;
  	var name = pd.pkgBower.name;
  	var ver = pd.pkgBower.ver;
  	var url = pd.pkgBower.repository && pd.pkgBower.repository.url ? pd.pkgBower.repository.url : '';
  	if (!name || !url) {
  		rbot.log.info('Skipping bower registration check '
  				+ (name || ver || url ? 'for "' + (name ? ':name:' + name : ':NO name:')
  						+ (ver ? ':version:' + ver : ':NO version:') + (url ? ':url:' + url : ':NO repository.url:')
  						+ '" ' : '') + (!path ? '("' + path + '" cannot be read)' : 'in: ' + path));
  		return pck.rollCall.then(npmPub);
  	}
  	var bower = null;
  	try {
  		bower = require('bower');
  	} catch (e) {
  		rbot.log.info('Skipping bower registration (bower module not found)', e);
  		return pck.rollCall.then(npmPub);
  	}
  	pck.rollCall.pause(function bowerLookup() {
  		bower.commands.lookup(name).on('error', function(e) {
  			pck.rollCall.error('bower lookup failed', e).resume();
  		}).on('end', bowerLookupEnd);
  	});
  	function bowerLookupEnd(data) {
  		if (data) {
  			if (data.url !== url) {
  				pck.rollCall.error(
  						'bower lookup found "' + name + '", but the repository.url found "' + data.url
  								+ '" does not match the expected "' + path + '" repository.url "' + url + '"').resume();
  			} else {
  				rbot.log.verbose('found existing bower package for "' + name + '" at "' + data.url
  						+ '"... no need to perform bower register');
  			}
  		} else {
  			rbot.log.info('registering bower package "' + name + '"');
  			pck.rollCall.pause(function bowerReg() {
  				bower.commands.lookup(name, url).on('error', function(e) {
  					pck.rollCall.error('bower registration failed', e).resume();
  				}).on('end', bowerRegEnd);
  			});
  		}
  	}
  	function bowerRegEnd(data) {
  		if (data) {
  			rbot.log.info('bower registration complete');
  			rbot.log.dir(data);
  			pck.rollCall.then(npmPub).resume();
  		} else {
  			pck.rollCall.error('bower registration failed (no data received)').resume();
  		}
  	}
  	function npmPub() {
  		publishNpm(pck);
  	}
  }