RE: Trigger on request owner is unassigned
Yes, this is possible.
You can use the trigger: "Saving a request" or "Request changed owner" to check what the value was before and after the change.
getParserVariable("ticket.old.ownedBy") and getParserVariable("ticket.new.ownedBy")
Now - these triggers won't let you stop the action, just do additional logic.