It's odd to me to call this a capability. We have a term for this already: dynamic bind, known as dynamic scope when it's the main scoping mechanism of a language.
That said, the mechanism seems like the right way for Rust to solve this problem, since ambient allocation is deeply baked into the language, and taming implicit globals with dynamic bind has a long history, and works fairly well.