[isDisabled]="disabled || isDisabled(node, nodeIndex(index))"
Because of the hardcoded disabled property, isDisabled cannot be reliably used to control which item is disabled.
Disabling the parent node automatically disables the entire tree under it and isDisabled is never called for those items.
It should behave like other functions - isChecked, isExpanded, isVisible etc - where you have full control over which item does what.