docs: function renderCustomTemplate() {
  
  	var that = this,
  	    child,
  	    vars = {},
  	    i;
  
  	for (i = 0; i < this.children.length; i++) {
  		child = this.children[i];
  
  		if (!child.getAttribute) {
  			continue;
  		}
  
  		if (child.getAttribute('slot')) {
  			vars[child.getAttribute('slot')] = child;
  		}
  	}
  
  	Hawkejs.removeChildren(this);
  
  	return Fn.series(function renderTemplate(next) {
  
  		var template = that.constructor.compiled_template || that.constructor.template_file;
  
  		that.hawkejs_renderer.renderTemplate(template, {self: that}, String(c++)).done(next);
  	}, function assembleBlock(next, template) {
  		template.target_block.assemble().done(next);
  	}, function assembledBlock(next, block) {
  
  		var slots,
  		    slot,
  		    name,
  		    i;
  
  		for (i = 0; i < block.lines.length; i++) {
  			that.append(block.lines[i]);
  		}
  
  		slots = Hawkejs.getElementsByAttribute(that, 'data-he-slot');
  
  		for (i = 0; i < slots.length; i++) {
  			slot = slots[i];
  			name = slot.dataset.heSlot;
  
  			if (vars[name]) {
  				Hawkejs.replaceChildren(slot, vars[name].childNodes);
  			}
  		}
  
  		next();
  	}, null);
  }