I wouldn't say monkey patching is bad, it's more like a "should avoid" practice, there are definitely scenarios where monkey patching is useful.
Another way to solve this problem is through inheritance so you could have something like:
class SuperHash < Hash
def delete_blanks!
delete_if { |k, v| v.is_nil? }
end
end