I was looking for a way of passing around data between diferent instances of ig.game instead of storing them in a global variable, and I stumbled upon this plugin.

But since I wasn't comfortable with injecting ig.System and ig.Game at the same time, I decided to look for an alternate way of doing that, so I came up with this:

/*global ig*/
ig.module(
    'plugins.scene.manager'
).requires(
    'impact.impact'
).defines(function () {
    'use strict';
    ig.SceneManager = ig.Class.extend({
        staticInstantiate: function (ignore) {
            this.alias('scene');
            return ig.SceneManager.instance || null;
        },
        alias: function (name) {
            Object.defineProperty(ig, name, {
                value: this
            });
        },
        init: function () {
            ig.SceneManager.instance = this;
        },
        set: function (scene, data) {
            var key;
            for (key in data) {
                if (data.hasOwnProperty(key)) {
                    scene.prototype[key] = data[key];
                }
            }
            ig.system.setGame(scene);
        }
    });
    return new ig.SceneManager();
});

It passes the data around manipulating the prototype of the ig.Game object before instancing it. it is quite simple to use:

var data = { message: 'It Works!' };

ig.scene.set(ig.SceneTitle, data);

You can get the code from this repo