Definitely understood. The use case seems pretty clear: as a user, I need to be able to explicitly specify the default value of a property in the event that another property cannot be expanded.
However, the proposed implementation *is* defined to use the existing string expression interpolation engine. The contract for the engine is clear: wherever there is an expression, that expression is lexicographically replaced with the exact replacement string. By stipulating a new modified contract based on the use case (specifically, that certain expressions must stand alone), you're introducing a new and arguably unexpected behavior to the existing contract, which brings complications in terms of usability (principle of least surprise for example) as well as implementation (an extra check based on the kind of expression found).
On the other hand, since the contract of the interpolation engine *is* already existent, if the expression engine is used for this purpose in an idiomatic manner (i.e. a special expression argument, which is directly supported already by the expression API), then the user can easily extrapolate that the default value expression is just another expression and can be used in the exact manner of any other expression, and as a result the user has slightly more flexibility than what was originally required (which is not necessarily a bad thing, as long as the implemented functionality can be concisely described in documentation).