Вы можете избежать повторения сигнатур функций, создав псевдоним для каждой функции:
val doSomething = a.doSomething _
val doOtherthing = a.doOtherThing _
Однако теперь это функциональные значения, а не методы, которые могут или не могут иметь значение в зависимости от использования.
Возможно, можно использовать trait
или решение на основе макросов, но это зависит от деталей того, почему используется делегирование.