To anyone else who gets lost when code comes up, I've gotten scaling to work through this method dependably.
Say you want to zoom out your game to 50% scale. You can accomplish this using 2 code blocks, one in a "when created" event within the behavior responsible for zooming, and another to be used where ever the zooming will be triggered (ex. in a "when touched" event)
In the when created event, you'll define two variables that are rectangles. These control how much of the screen is shown at once. The first variable (which I've called _ScaleStandard) is the default size, and the second (which I've called _ScaleSmall) is bigger to accommodate the smaller game scale. You can copy and paste this into a code block.
var _ScaleStandard = new nme.geom.Rectangle(0, 0, (scripts.MyAssets.stageWidth * Engine.SCALE), (scripts.MyAssets.stageHeight * Engine.SCALE));
var _ScaleSmall = new nme.geom.Rectangle(0, 0, ((scripts.MyAssets.stageWidth * Engine.SCALE) * 2), ((scripts.MyAssets.stageHeight * Engine.SCALE) * 2));
NOTE: Multiplying stageWidth/stageHeight by Engine.SCALE makes scaling work on different devices with different resolutions. If you don't multiply by Engine.SCALE, this zooming method will not work on iPhone 4/S/5 or new iPads.
Now you can use those two rectangles in the code block used to zoom the game. Say you want the game to zoom in when the player touches the screen. Create a when mouse is pressed event or an always event which acts as a switch to determine if the game should zoom. In that event, place a code block like this:
Engine.engine.root.scrollRect = _ScaleSmall;
Engine.engine.root.scaleX = 0.5;
Engine.engine.root.scaleY = 0.5;
Engine.screenScaleX = 0.5;
Engine.screenScaleY = 0.5;
Engine.screenWidth = (2 times whatever your screen width is, for example, the screen width of an iPhone in landscape is normally 480, so put 960);
Engine.screenHeight = (2 x screen height);
This block will shrink all graphics on screen to 50% scale. The screenScaleX and screenScaleY lines are necessary to update things like mouse coordinates to the new scale. Updating the screenWidth and screenHeight makes it so that the tileset is not clipped inappropriately. The dimensions are doubled because when you shrink everything by 50%, twice as much stuff can fit on the screen.
Whenever you want to return the game back to standard scale, use this block:
Engine.engine.root.scrollRect = _ScaleStandard;
Engine.engine.root.scaleX = 1.0;
Engine.engine.root.scaleY = 1.0;
Engine.screenScaleX = 1.0;
Engine.screenScaleY = 1.0;
Engine.screenWidth = (whatever the screen width is);
Engine.screenHeight = (whatever the screen height is);
You can modify these blocks to zoom at any scale, not just 50%. Replacing the scaleX/Y and screenScaleX/Y values with 2 and reducing screenWidth/Height to 1/2 will zoom in to 200%, etc.
Hope this helps. One issue I haven't yet been able to resolve is scaling backgrounds to match the zoom amount. If anyone else knows how that can be accomplished please post the solution.