I agree that the final option is very clear!

Can you elaborate on the collisions?  I think the resolution order here is clear:
1. If `path` is a dotted property that exists on `value`, use that.
2. Otherwise, it traverses an object as expected.
Can you give an example of the collisions you're expecting?

Considering that dotted property names are usually linter errors, and generally are artifacts of a serializer, i think you can make the case that nested objects are a much more natural usecase than supporting dotted properties.  Whatever that means for an intuitive syntax, though, I don't know :)  The last one looks a bit like MongoDB's query language, so maybe it's less surprising than I think.