(Note: File and image attaching are not working for me at the moment, so I'm using external URLs for when everything comes back on line.)
Essentially you would be simulating a 3D space.
I'll outline some terms and ideas first, and then explain how you might put them together to get your character jumping up onto crates and walking on them.
Ignoring jumping (Z) to start with, you just have X and Y making up the ground plane.
X allows you to walk West and East, which is represented as left and right movement on the screen.
Y allows you to walk North (away from camera) and South (towards camera), which is represented as up and down movement on the screen.
When you add jumping, you now have a third coordinate to keep track of, Z. We track the character's Z coord with our custom altitude variable.
Z allows you to ascend and descent over the "ground", and is represented as up and down movement on the screen.
Since Y and Z are both represented as up and down movement on the screen, in many games a shadow is placed under the character, so that it's easy to tell the difference between walking North and South, and Jumping up and down. When jumping, the character moves up and down, but the shadow stays on the ground at the footprint coords.
Collision & Z-overlap
(image link) - Here the player is in mid jump, and their shadow is visible on the block just below.
If we want the character to be able to stand on a box, then we need to know when the character's XY footprint is overlapping the box's XY footprint.
We also need to know how "tall" the box is, (its Z-height).
Once we know we're overlapping a box on the altitude (Z) axis, we can grab the Z-height value of the box, and use that as the current ground height. If that height is higher than the player's Z elevation, then the box is an obstacle to the player, but if it's lower than the player's Z elevation, then the player can pass "over" the box, or walk on it.
(image link) - Player sitting on a block, overhanging edge. (Player's footprint in green.)
(image link) - Player falling off the block. Notice that the footprint no longer overlaps the block's footprint.
(image link) - Player sitting on ground beside block.
In my first post I explained that you could outsource the jumping mechanics to a platform behavior object. In this new case, where the ground can have more than one height things get trickier. It's still possible to outsource to a platform behavior object, but its tricky enough that it might be better to just build your own simple Z-axis physics.
I built a demo capx that shows how some of this stuff could work in practice, though the code is a little hacky in places.