The viewSubType will be nil if the default application has not been set specifically for that cellView; if there's no viewSubType, the viewType is the actual viewType of the cellView.
You can also set the global default application by using these three cdsenv vars:
So the way you'd have to code it to do what you want is to first use the approach I described initially to get the base viewType of the cellView using ddGetObj approach - this can be done without opening the cellView. Then if the viewType is maskLayout, schematic, or schematicSymbol, you'd have to open the cellView using cv=dbOpenCellViewByType(lib cell view) and then check if cv~>viewSubType has been set - if so, you know the subViewType and hence the application used. If it's not set, you'd need to check the cdsenv to see if the global default app has been overridden.
I'll leave it to you to glue all this together, because what you're trying to do seems a fairly unusual requirement and probably specific to your needs rather than something general purpose.