It does seem idiosyncratic. In the first place, you have to use assignment - casting doesn't work in-line. Means that the following won't compile:
TREAT(scribble(1) AS rectangle).setHeight(60);
Guess you could work around that by just using assignment. Also, a simple assignment copies the object as a clone. Any modifications are not applied to the original object. Means that if you drew the original base object, it remains unmodified after the setHeight instruction:
scribble(1).draw();
Still fumbling my way around PL/SQL, but would it require a REF of some sorts to make the scribble(1) and rect vars point to the same memory location?