src/js/libs/spiritual-gui.js
function(spirit) {
		var prefixes = [],
			plugins = spirit.life.plugins;
		gui.Object.each(plugins, function(prefix, instantiated) {
			if (instantiated) {
				if (prefix !== "life") {
					prefixes.push(prefix);
				}
			} else {
				Object.defineProperty(spirit, prefix, {
					enumerable: true,
					configurable: true,
					get: function() {},
					set: function() {}
				});
			}
		});
		plugins = prefixes.map(function(key) {
			return spirit[key];
		}, this);
		if (!gui.unloading) {
			this.$nukeplugins(plugins, false);
			gui.Tick.next(function() { // TODO: organize this at some point...
				this.$nukeplugins(plugins, true);
				this.$nukeelement(spirit);
				this.$nukeallofit(spirit);
			}, this);
		}
	}
function(spirit) {
		var prefixes = [],
			plugins = spirit.life.plugins;
		gui.Object.each(plugins, function(prefix, instantiated) {
			if (instantiated) {
				if (prefix !== "life") {
					prefixes.push(prefix);
				}
			} else {
				Object.defineProperty(spirit, prefix, {
					enumerable: true,
					configurable: true,
					get: function() {},
					set: function() {}
				});
			}
		});
		plugins = prefixes.map(function(key) {
			return spirit[key];
		}, this);
		if (!gui.unloading) {
			this.$nukeplugins(plugins, false);
			gui.Tick.next(function() { // TODO: organize this at some point...
				this.$nukeplugins(plugins, true);
				this.$nukeelement(spirit);
				this.$nukeallofit(spirit);
			}, this);
		}
	}
function ( spirit ) { var prefixes = [ ] , plugins = spirit . life . plugins ; gui . Object . each ( plugins , function ( prefix , instantiated ) { if ( instantiated ) { if ( prefix !== "life" ) { prefixes . push ( prefix ) ; } } else { Object . defineProperty ( spirit , prefix , { enumerable : true , configurable : true , get : function ( ) { } , set : function ( ) { } } ) ; } } ) ; plugins = prefixes . map ( function ( key ) { return spirit [ key ] ; } , this ) ; if ( ! gui . unloading ) { this . $nukeplugins ( plugins , false ) ; gui . Tick . next ( function ( ) { // TODO: organize this at some point... this . $nukeplugins ( plugins , true ) ; this . $nukeelement ( spirit ) ; this . $nukeallofit ( spirit ) ; } , this ) ; } }
Nuke that spirit.

- Nuke lazy plugins so that we don't accidentally instantiate them
- Destruct remaining plugins, saving the {gui.Life} plugin for last
- Replace all properties with an accessor to throw an exception

@param {gui.Spirit} spirit
Nuke that spirit .