Пока остановился на решении c использованием Union. Суть метода:
1) Есть 2 дакта duct1, duct2
2) Делаем самый примитивный Family. тип Union - это важно.
3) вставляем Объект нашего типа между дактами, подсоединяем дакты к нему
4) удаляем этот объект.
5) проверяем duct1 и duct2 на IsValidObject, дакт который прошел проверку является результатом объединения. При этом все takeoff остаются подсоединенными.
По сути получается как раз удаление 1 дакта, увеличение длины второго и подсоединение takeoff от удаленного к тому который увеличил свой размер. Решение своеобразное...