Did you check the behavior in 15.7??? I say that because most (if not all) the changes in ASE wrt text/image handling was made in 15.7 - e.g. in-row lobs, text pointers, etc. With an in-row lob, you could almost think of it like a varchar(), which should have returned null when null.
However, I would say that
where textcol is null
....is a better solution than
where datalength(textcol)=0 (or whatever variant necessary)
...the latter takes much longer to execute. Think about it - if I have 2GB of text, datalength has to scan the textchain to get the total length....a laborious process and then compare with 0. Even if the value is null, datalength function has to be invoked. With 'textcol is null', all ASE has to do is check the column status bits for each row.