так по поводу nil, я не знаю как можно отличить дефолтнное значение от переданного, я думаю это опечатка, но в
notes.md обязательно укажи что по такойто причине внутри def initialize при обоих выховах и
CustomObjectTwo.new(nil) и
CustomObjectTwo.new значение хэша будет равно nil, и соответственно без изменения def initialize определения явно или неявно был передан nil невозможно