Yes that is ok. Sometimes classes contain abstract methods only for specific purposes (like streaming).
There is a bit more to it.
From a pure OO perspective abstract classes should not (or better:
can not!) be instantiated because it is unknown how the abstract methods are supposed to work. Hence the abstract classification. So it is a bad idea to instantiate abstract classes or allow them to be instantiated.
They serve an important purpose: to be at the top of an inheritance hierarchy.
Luckily the FPC compiler does recognizes them although they are only flagged as warnings (at least that's something).
If you want to have methods that 'do not have a purpose yet but they might', implement them as virtual and create an empty body.
(Although the programming paradigm
YAGNI also applies.)
Also it would create problems with versioning, e.g. when an abstract methods is added to a baseclass in a new FPC version, all old code wouldn't compile anymore till the new method was overriden.
True. Thats the reason why this shouldn't happen that often with classes already in usage. Especially in the LCL.
And if it does happen it is good the compiler recognizes it so the inheriting classes can be adapted.
(Or the the method not being defined as abstract but merely virtual as described above.)