I'd disagree that an L-system is appropriate here, since they have no concept of loops at all, and they don't seem particularly suited for stochastic models...Most of those examples are context-free grammars, and that really isn't useful at all when you have to deal with a concept of space...They generally don't terminate in any useful way (except possibly becoming stable after N iterations) and, being iterative, have no sense of how the whole system fits together... I'd say that's really the wrong tree to bark up.
Those L-systems given by Wikipedia arn't stochastic, but hack in a random number generator at some points and things become different
Also, they have the aditional bonus of being interconected, which is quite important for caves. Perlin noise will usualy generate isolated area's, which means you have to backtrack and open up some passages. You could use Voronoi diagrams, but they tend to generate larger angels then the ones you see on the example. Also, voronoi diagrams are completely looped, there are no dead ends. That only leaves something similar to an L-system, or a celular automaton, though I would be interested to see if you've got another idea.
Also, it's quite easely to give an L-system or a celular automnaton some sense of space, since it's working on a finit and usualy small amount of points. For each of those points you can check the surrounding area and make rules based upon that. Perlins and Voronois don't quite have that luxery, thouhg you could hack in a small amount of sense into a voronoi.
In this case, a celular automaton wouldn't be too great for generating the skeleton I'd assume, since it'd be unable to easely generate twisting arms and things like that. Also, you'd need to check way more points if you're going to base descions upon the surroundings.
Virex: the main difficulty with the approach you're suggesting is that it requires analysis of the local area of the map. Keep in mind that a cell "expands" by making copies of itself in adjacent squares in the grid, not by literally expanding. Thus it can't know, after N expansions, if it's gotten huge, or if it's been absorbed by other cells. This gets especially tricky at the places where the tree branches; I've had more than a few different algorithms completely choke the branchpoints with platforms.
Hmm, that's not easy to solve. Have you considered my previous idea of placing the platforms first and then generating the cave? For that you practicaly coppy the aglorithm you're using for the tree. I think it'll be quite possible to get the platforms to spawn upon a set distance, based upon the dificulty level for the area, that is jumpable/climbable/traversable in another way if you've got a certain set of upgrades.
Generating the floor on a jumpable distance could be done by capping the max amount of replications your celular automaton can do. If you'd like a slightly more comlicated system you could even only cap it in the down direction