docs: func s3Customizations(a *API) {
  	var strExpires *Shape
  
  	var keepContentMD5Ref = map[string]struct{}{
  		"PutObjectInput":  {},
  		"UploadPartInput": {},
  	}
  
  	for name, s := range a.Shapes {
  		// Remove ContentMD5 members unless specified otherwise.
  		if _, keep := keepContentMD5Ref[name]; !keep {
  			if _, have := s.MemberRefs["ContentMD5"]; have {
  				delete(s.MemberRefs, "ContentMD5")
  			}
  		}
  
  		// Generate getter methods for API operation fields used by customizations.
  		for _, refName := range []string{"Bucket", "SSECustomerKey", "CopySourceSSECustomerKey"} {
  			if ref, ok := s.MemberRefs[refName]; ok {
  				ref.GenerateGetter = true
  			}
  		}
  
  		// Expires should be a string not time.Time since the format is not
  		// enforced by S3, and any value can be set to this field outside of the SDK.
  		if strings.HasSuffix(name, "Output") {
  			if ref, ok := s.MemberRefs["Expires"]; ok {
  				if strExpires == nil {
  					newShape := *ref.Shape
  					strExpires = &newShape
  					strExpires.Type = "string"
  					strExpires.refs = []*ShapeRef{}
  				}
  				ref.Shape.removeRef(ref)
  				ref.Shape = strExpires
  				ref.Shape.refs = append(ref.Shape.refs, &s.MemberRef)
  			}
  		}
  	}
  	s3CustRemoveHeadObjectModeledErrors(a)
  }