It's really hard to argue with this. But I'm not sure "freedom to be an asshole" (to state the extreme case) is the primary ethical good that is being sought -- particularly since one could easily restate the freedoms of, say, the GPL in negative terms. You are not free to redistribute the program without its source, you are not free to use the software without accepting the terms of the license, you are not free to not indemnify the authors of the software against lawsuit over fitness for a particular purpose, and so forth.
But what this does imply is that however you slice it, fixing this problem involves ethical coercion. You can only try to persuade people (and companies) that it would be better to behave a certain way. You can't force them to do so.
If one wants to contribute back, one is free to, but one is equally free not to. Developers are also free to support software however they choose, or fork and add whatever features upstream refuses to add themselves. If developers want to release code under a nonfree license that requires reciprocation then that's what they should do.