Не уверен, что я понимаю ваш вопрос, но последняя часть о проверке, можете ли вы вызвать метод для объекта, это может быть сделано путем проверки метакласса объекта, с которым вы имеете дело, вот так.
obj.metaClass.respondsTo(obj, 'theMethodYouWantToCall')
obj - это объект, для которого вы хотите вызвать метод, а theMethodYouWantToCall - это имя метода, который вы хотите вызвать.
RespondsTo вернет пустой список [], если метод, который вы пытаетесь вызвать, не найден