If Array#join were to accept a block, I would expect its behavior to relate directly to the "join" action itself, not the transformation of each element (which is the responsibility of map).
Specifically, it seems most appropriate for the block's return value to be used as the separator between elements. This would allow for dynamic separators based on context, such as the position of the join.
For example, this approach provides an elegant way to handle the Oxford comma:
items=["Apple","Banana","Cherry"]i=0str=items.joindoi+=1ifi==items.size-2", and "else", "endendpstr#=> "Apple, Banana, and Cherry"
I believe this approach is more intuitive and consistent.
To be clear, I am not making a counter-proposal here. My main point is that it feels illogical for Array#join to accept a block that performs a map-like operation, as that behavior is unrelated to the behavior of "join" itself.
It's fundamentally join_map we have rejected. Array#join should join, not mapping.
We are not going to add every enumerable method combined with map. filter_map is an exception.