Faits :
A.
A.a. A._, né en 1973, a travaillé en qualité de comptable-gestionnaire pour le compte de B._ SA depuis le 15 juillet 2005. En septembre 2010, il a déposé une demande de prestations de l'assurance-invalidité, à la suite de laquelle l'Office de l'assurance-invalidité du canton de Genève (ci-après: l'office AI) lui a alloué une demi-rente d'invalidité à compter du 1er août 2011, fondée sur un taux d'invalidité de 50 % (décision du 4 novembre 2011).
A.b. Au terme d'une procédure de révision du droit aux prestations initiée en mars 2014, l'office AI a, par décision du 1er juillet 2016, supprimé le droit de l'assuré à la demi-rente d'invalidité avec effet au 1er septembre 2016; il a également retiré l'effet suspensif à un éventuel recours. En bref, il a considéré que l'assuré n'avait pas subi de perte de gain depuis l'apparition de l'atteinte à la santé en 2009, si bien que sa décision du 4 novembre 2011 était manifestement erronée et devait être reconsidérée. Après avoir rejeté la requête en restitution de l'effet suspensif (jugement incident du 13 octobre 2016), la Cour de justice de la République et canton de Genève, Chambre des assurances sociales, a partiellement admis le recours formé par l'assuré; elle a annulé la décision du 1er juillet 2016 et renvoyé la cause à l'administration pour instruction complémentaire et nouvelle décision (jugement du 25 janvier 2017).
A.c. Reprenant l'instruction, l'office AI a requis de l'assuré qu'il lui transmette une copie de ses certificats de salaire pour les années 2008 à 2015 et de tous les accords éventuellement conclus portant sur le montant de sa rémunération (correspondances des 5 juillet, 3 août et 20 décembre 2017). Par décision du 2 juillet 2019, l'administration a derechef supprimé la demi-rente d'invalidité au 1er septembre 2016, par la voie de la reconsidération, motif pris de l'absence de perte de revenu depuis 2009.
B.
Statuant le 14 mai 2020 sur le recours formé par A._, la Cour de justice genevoise, Chambre des assurances sociales, l'a admis. Elle a annulé la décision du 2 juillet 2019 et reconnu le droit de l'assuré au maintien de la demi-rente au-delà du 31 août 2016.
C.
L'office AI interjette un recours en matière de droit public contre ce jugement dont il demande l'annulation. Il conclut principalement à la confirmation de sa décision du 2 juillet 2019 en ce qu'elle supprime la demi-rente accordée à l'assuré; subsidiairement, il requiert le renvoi de la cause à la juridiction cantonale pour nouvelle décision.
L'assuré conclut au rejet du recours, tandis que l'Office fédéral des assurances sociales a renoncé à se déterminer.

Considérant en droit :
1.
Le recours en matière de droit public peut être interjeté pour violation du droit, tel qu'il est délimité par les art. 95 et 96 LTF. Le Tribunal fédéral applique le droit d'office (<ref-law>). Il statue par ailleurs sur la base des faits établis par l'autorité précédente (<ref-law>), sauf s'ils ont été établis de façon manifestement inexacte ou en violation du droit au sens de l'<ref-law> (<ref-law>). Le recourant qui entend s'en écarter doit expliquer de manière circonstanciée en quoi les conditions de l'<ref-law> sont réalisées sinon un état de fait divergent ne peut pas être pris en considération.
2.
2.1. Compte tenu des motifs du recours, le litige porte en instance fédérale sur la suppression, avec effet au 1er septembre 2016, de la demi-rente d'invalidité accordée à l'intimé depuis le 1er août 2011. L'office AI invoque la voie de la révision (<ref-law>) ou de la révision procédurale (<ref-law>). Il ne s'en prend en revanche pas aux considérations de la juridiction cantonale, selon lesquelles la suppression de la rente ne pouvait pas intervenir en application des règles sur la reconsidération des décisions formellement entrées en force (<ref-law>).
2.2. Le jugement attaqué expose de manière complète les dispositions légales et les principes jurisprudentiels relatifs, notamment, à la notion d'invalidité (art. 7 et 8 al. 1 LPGA en relation avec l'<ref-law>) et à son évaluation (<ref-law> et <ref-law>). Il rappelle également les conditions permettant de réviser le droit à une rente d'invalidité (<ref-law>, <ref-law>, art. 86teret 87 al. 1 let. b RAI; <ref-ruling> consid. 3 p. 132 et les arrêts cités), ainsi que les règles applicables à la révision des décisions formellement passées en force (<ref-law>; <ref-ruling> consid. 5b p. 358 et les arrêts cités; arrêt 9C_365/2015 du 6 janvier 2016 consid. 3.1). Il suffit d'y renvoyer.
3.
3.1. L'office recourant reproche à la juridiction cantonale d'avoir violé le droit fédéral et procédé à une appréciation arbitraire des faits pour nier que les conditions d'une révision (<ref-law>) ou d'une révision procédurale (<ref-law>) étaient réalisées, avec pour conséquence qu'elle a maintenu le droit de l'assuré à une demi-rente d'invalidité au-delà du 31 août 2016.
3.2. Contrairement à ce que soutient l'office recourant, la juridiction cantonale ne s'est pas prononcée sur le point de savoir si les conditions d'une révision (<ref-law>) ou d'une révision procédurale (<ref-law>) étaient en l'espèce remplies. Elle a examiné et jugé que la suppression de la rente ne pouvait pas intervenir en application des règles sur la reconsidération des décisions formellement entrées en force (<ref-law>). Si elle a envisagé une substitution de motifs, en rappelant notamment la règle posée par l'<ref-law>, selon laquelle une amélioration du revenu dépassant 1500 fr. par an permet une révision de la rente conformément à l'<ref-law>, elle n'a cependant pas examiné si les conditions de ces dispositions étaient réalisées, ni partant constaté les faits y relatifs. Elle a retenu que l'office AI n'avait pas soutenu que l'éventualité d'une révision était réalisée, ni ne s'était prévalu d'une révision procédurale. A cet égard, l'office AI a motivé sa réponse au recours du 8 octobre 2019 en se référant uniquement aux conditions de la reconsidération, sans invoquer la possibilité d'une révision au sens de l'<ref-law>. Aussi, les premiers juges n'ont-ils pas examiné la suppression de la rente en substituant une autre motivation à celle de l'administration, ce qui aurait au demeurant exigé, le cas échéant, d'entendre les parties sur ce point (cf. <ref-ruling> consid. 4 p. 370).
3.3. Selon la jurisprudence, lorsque l'assureur social invoque une substitution de motifs - en requérant que la décision administrative fondée sur l'<ref-law> soit examinée par l'autorité de recours sous l'angle de la reconsidération -, la juridiction cantonale n'est pas seulement autorisée mais tenue d'examiner la substitution de motifs requise (arrêts 8C_634/2017 du 20 février 2018, consid. 5.4; 8C_288/2016 du 14 novembre 2016, consid. 4.5; 9C_303/2010 du 5 juillet 2010, consid. 4.4, in SVR, 2011 IV n° 20 p. 53; THOMAS FLÜCKIGER, in: Commentaire bâlois, Allgemeiner Teil des Sozialversicherungsrechts, 2020, N 113 ad <ref-law>). En l'espèce, l'office recourant s'est contenté d'invoquer la reconsidération en instance cantonale pour justifier sa décision, sans invoquer la possibilité d'une substitution de motifs, ni apporter des éléments en faveur d'une révision voire d'une reconsidération procédurale. On ne saurait dès lors reprocher à la juridiction cantonale de n'avoir pas examiné le litige sous l'angle d'une substitution de motifs, ni lui imposer une telle manière de procéder.
Par conséquent, le recours est mal fondé.
4.
Vu l'issue de la procédure, l'office recourant, qui succombe, supportera les frais judiciaires ainsi que les dépens que peut prétendre l'intimé (art. 66 al. 1 et 68 al. 1 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté.
2.
Les frais judiciaires, arrêtés à 800 fr., sont mis à la charge du recourant.
3.
Le recourant versera à l'intimé la somme de 2800 fr. à titre de dépens pour la procédure devant le Tribunal fédéral.
4.
Le présent arrêt est communiqué aux parties, à la Cour de justice de la République et canton de Genève, Chambre des assurances sociales, et à l'Office fédéral des assurances sociales.
Lucerne, le 11 mars 2021
Au nom de la IIe Cour de droit social
du Tribunal fédéral suisse
Le Président : Parrino
La Greffière : Perrenoud