It is also perfectly legal to add a property and use the same getter and setter as already defined for another property.
Also note visual components are often derived from a TCustomXXX which in many cases just not publishes properties.
If that is the case you can add a property whith a different name in your derived component and publish that instead of - in this case - caption and use the access methods that are defined for caption: either FCaption directly or the get and/or set methods.
The other option is to write a getter and setter that accesses the caption property. That is legal:
type
TMyButton= class(TSpeedButton)
private
{ Private declarations }
protected
{ Protected declarations }
function GetTheRealCaption:String; // here it is legal to return the caption property
procedure SetTheRealCaption(aString:string); // here it is legal to set the real caption property instead if the field...
public
{ Public declarations }
published
{ Published declarations }
property Text read GetTheRealCaption write SetTheRealCaption;
end;
If you want that? You've got it.
I do not recommend it, though....