The "best method" depends on how you want to do it. Assuming you want to do it via T-SQL, then maybe something like below (I've omitted any error/missing object checking):
DECLARE @current_proc_name nvarchar(100);
DECLARE @new_proc_name nvarchar(100);
DECLARE @proc_source nvarchar(max);
SET @current_proc_name = 'proc1';
SET @new_proc_name = 'proc1_new';
SELECT @proc_source = OBJECT_DEFINITION(OBJECT_ID(@current_proc_name));
SET @proc_source = STUFF(@proc_source, CHARINDEX(@current_proc_name, @proc_source), LEN(@current_proc_name), @new_proc_name);
IF CHARINDEX('ALTER', @proc_source) > 0 AND
CHARINDEX('ALTER', @proc_source) < CHARINDEX('SOURCE', @proc_source)
BEGIN
SET @proc_source = STUFF(@proc_source, CHARINDEX('ALTER', @proc_source), 5, 'CREATE')
END /*IF*/
SELECT @proc_source;
EXEC(@proc_source);
SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.