The returning_clause changed in 23c. It got the support of old and new. However, the optionality of a data_item did not change. The following figure compares the railroad diagrams in 23c and 21c:

For 23c see https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/DELETE.html#GUID-156845A5-B626-412B-9F95-8869B988ABD7__I2122564
According to the new 23c railroad diagram, the following script should work:
drop table if exists t;
create table t (id number);
insert into t (id) values (42);
delete from t where id = 42 returning old id into;
It does not make sense. And therefore it's ok that this throws an SQL Error: ORA-00936: missing expression.
The following amended script with a data_item works:
drop table if exists t;
create table t (id number);
insert into t (id) values (42);
variable myid number
delete from t where id = 42 returning old id into :myid;
print myid
Table T dropped.
Table T created.
1 row inserted.
1 row deleted.
MYID
----------
42
So it looks like the new optionality of data_item in the documentation of 23c seems to be wrong.