But in {$MODE OBJFPC} the error appears, regardless of {$MODESWITCH DUPLICATELOCALS}:
Inconsistencies are consistently "deficient" ideas. In the following code:
{$MODE OBJFPC}
{$MODESWITCH DUPLICATELOCALS}
{$MODESWITCH ADVANCEDRECORDS}
program DuplicateIdentifier;
type
TSome = record
FieldA : integer;
FieldB : integer;
procedure Proc1;
procedure Proc2;
procedure Proc4;
end;
procedure TSome.Proc1;
begin
end;
procedure TSome.Proc2;
(*
procedure Proc1; { Proc1 is NOT ok here }
begin
end;
*)
(*
procedure Proc2; { Proc2 is NOT ok here }
begin
end;
*)
procedure Proc3;
{ but all the duplicates you can eat here, bon appetit }
procedure Proc1; { Proc1 is ok here }
begin
end;
procedure Proc2; { and so is Proc2 }
begin
end;
procedure Proc3;
procedure Proc3;
procedure Proc4; { have another Proc4 for dessert }
procedure FieldA();
begin
end;
begin
end;
begin
Proc4(); { which Proc4 gets called ? }
end;
begin
Proc4(); { which Proc4 gets called - not the same one as above! }
end;
begin
Proc4(); { which Proc4 gets called ? }
end;
begin
end;
procedure TSome.Proc4;
begin
end;
begin
end.
if Proc1 and Proc2 are nested in TSome.Proc2 then the compiler is unhappy and emits an error BUT, if Proc1 and Proc2 are nested in Proc3, suddenly there is no more duplicate identifier, IOW, identifier "Proc1" is different than identifier "Proc1" and the same for "Proc2".
But, there can be a "Proc3" inside a "Proc3" inside another "Proc3" without any complaints about duplicate identifiers. If that isn't enough, since an error is emitted when a "duplicate identifier" is found, that really puts in doubt which Proc4 is invoked by the various Proc3(s)
No wonder they say the road to hell is paved with good identifiers ... uh... I mean good intentions.

It's much easier to figure things out when rules have no exceptions. If the compiler is going to complain about "duplicate identifier"s then it should NOT allow any function/procedure/method to be named the same as another one in the entire hierarchy thus making it consistent. IOW, all names unique in the entire scope.
Alternatively, if it wants to complain about "duplicate identifiers" then it should at least issue a warning for all duplicates it is willing to tolerate and an error for those it is not. At least a semblance of consistency.