Generics allow you to write code once that can deal with any data type in a typesafe manner without the need for typecasting.
TSomeClass<T> = class
  FData : T;
  procedure SetData(inData : T);
  property Data : T read FData write SetData;
  a : TSomeClass<integer>;
  b : TSomeClass<string>;
  a := TSomeClass<integer>.Create;
  a.Data := 5;

  b := TSomeClass<string>.Create;
  b.Data := 'The rain in spain';
Further examples
Allen Bauer (Emb.) provided an implementation of nullable types using generics.
Barry Kelly describes a copy on write generic array that exhibits the copy on write behaviour shown by the Delphi string type.
Collections 1.0 - A library of generics based collection classes from Alex Ciobanu (Emb.) to add to those that come with Delphi.
Craig Stuntz (TeamB) discusses using generics for nullable types, mock objects and MVC patterns.
Lars Fosdal (ab)uses generics to create a case statement that works with strings.
Craig Stuntz (TeamB) implements Memoization - a generic solution to the problem of caching function results.
Francois Piette writes a thread safe high speed queue class that uses generics and custom enumerators.
Further reading
Consuming standard generics classes
Roland Beenhakker shows how to use the collection classes provided with Delphi.
Examples using the TList<T> class found in Generics.Collections.pas
Examples using the TDictionary<TKey, TValue> class found in Generics.Collections.pas
Zarko uses an anonymous method comparer function to sort a TList<T>.
Introductory Tutorials
Dr Bob provides an introduction to using generics.
Malcolm Groves experiments with using generic interfaces.
Nick Hodges discusses writing your own generic classes rather than just using the standard generics based container classes.
Comprehensive Tutorials
The Embarcadero DocWiki help entry for constraints
Alex Ciobanu (Emb.) discusses constructor constraints
An in depth look at constraints and how they are implemented by Felix Colibri.
A workaround for the lack of operator constraints from Chris Rolliston.
A workaround for the lack of primitive type constraints by Craig Stuntz (TeamB).
Mason Wheeler discusses the increase in executable size that comes with using generics and proposes potential future solutions.
Type compatibility
Mason Wheeler discusses type compatibility of generic types (also known as the covariance)
Advanced Techniques
Dr Bob combines anonymous methods with generics.
Barry Kelly (Emb.) has a example of using anonymous methods and generics to write an enumerator.
Allen Bauer (Emb.) uses generics to implement an enumerator.
Stefan Glienke uses generics to implement an enumerator with the goal of simulating the extension methods of C#.
Multi-threaded applications
Allen uses anonymous methods in conjunction with generics and the TMonitor record.
David Clegg describes how he uses generics and anonymous methods to create threads that will return a result of some kind and notify the calling thread of it's progress as it goes.