Since I is decentralized, it is upto the intances. There is no central authority to eject an instance. Rather other instances individually block the instances they find objectionable to their own criterion.
At basic its that. Inpractice moderation federations and coalitions etc. have formed among instances of “we maintain joint blocking list and any of us can suggest new additions to it”.
Due to this one can get ejected from rather sizeable swath, if one one the moderation federations puts one on block list and that is pretty much as far as an “you have 24 hours or we boot you”. You get booted from all the instances part of that federation/coalition.
Plus stuff like just sources/authors trusted by various instances. “If this guy puts an instance on their published black list, we block. So far that guy has done good job with his list”. Ofcourse instance can at any point decide to not trust that list author anymore.
So there is no one “how mastodon does it”. Infact this is the one area where “on what instance are you” matters. Since how your home instance decides to do moderation and blocking, that is how your blocking happens. Plus ones personal additions on top.
Mastodon has a moderation action feature, where one can see listing of what instances and user have been blocked or other moderation action taken. There is explanation field there also for moderator to say “why” but obviously that is upto instance on what their policy is on how exacting their moderation documentation policy is.
Always 50/50 because two party system, FPTP and electoral college.