I'm pretty sure that, as is, if a player is on a pure g-league contract anyone on the league can sign them. I don't know if the team who signed them to their g-league has the opportunity to block it by adding them to their 15 man roster, that may be the case, but if you're a g-league player (NOT on a 2 way deal, those guys are exclusive and get payed a lot more but not NBA money) and any NBA team comes calling, you're free to go at any time.
In the case of amnesty, I expect the players went along with it because it allowed teams to clear huge among of cap space to sign more players while costing existing players nothing. Sure, a few guys got humiliated by having some team say "I'd rather give you money for nothing that have you on my cap" but for each guy that got embarrassed (and still payed) other dudes got money.
As a permanent feature in it's original "amnesty" form I think it would be disastrous for small market teams. You'd see teams like the Knicks and Lakers continuously wipe big contracts off of their cap space and spend more with no luxury tax penalties, not only pricing small market clubs out of free agency but driving up wages around the league.
Instead, if a player gets waived and the rest of the league can then bid on said player's remaining contract value, like what we did with Scola, only with whatever leftover portion is still put against the original team's cap... I think that would be fair for everyone.
For example, in awful Carmelo's case: The Hawks waive Melo's obscene 30 million dollar deal, the rest of the league puts in blind bids on what they'd offer him (teams over the cap can only offer the minimum), if some idiot team that is way under the cap offers 10 mil, they get to pay Carmelo 10 million... but he still counts 20 million against the Hawks.