I made a quick test that uses buttons with hints and empty hints ... and it worked just fine on Delphi 10.3. Perhaps the issue is on your Delphi (can you give more details about your version, are you using vcl-style ?,...).
Something like this ?
procedure CheckEmptyHint(AComponent: TComponent);
var
LComponent: TComponent;
LControl: TControl;
begin
if (AComponent is TControl) then
begin
LControl := TControl(AComponent);
if LControl.ShowHint and (LControl.Hint = EmptyStr) then
Main.Memo1.Lines.Add(Format('%s has empty hint property.', [AComponent.Name]));
end;
for LComponent in AComponent do
CheckEmptyHint(LComponent);
end;
// CheckEmptyHint(Application);